package common

import (
	"errors"
	"github.com/mjiulee/lego"
)

const CTX_KEY_USER_DATA = "user_data"
const CTX_KEY_SESSION_DATA = "session_data"

type UserData struct {
	TokenWho Who
	Who      Who
	//user LoginUser
}

type SesionData struct {
	SysTokenWho *Who
	AppTokenWho *Who
	//user LoginUser
}

func GetUserData(ctx *lego.RequestCtxExtent) *UserData {

	userData, ok := ctx.UserValue(CTX_KEY_USER_DATA).(*UserData)
	if !ok {
		panic("the type of user data is invalid")
		return nil
	}

	return userData

}

func IsExistSessionData(ctxExt *lego.RequestCtxExtent) bool {
	_, ok := ctxExt.UserValue(CTX_KEY_SESSION_DATA).(*SesionData)
	return ok

}
func GetSessionData(ctxExt *lego.RequestCtxExtent) (*SesionData) {
	sessionData, ok := ctxExt.UserValue(CTX_KEY_SESSION_DATA).(*SesionData)
	if !ok {
		panic("session data in GetSessionDataByCtx() is invalid")
		return nil
	}

	return sessionData
}

func GetSessionDataWithError(ctxExt *lego.RequestCtxExtent) (*SesionData, error) {
	sessionData, ok := ctxExt.UserValue(CTX_KEY_SESSION_DATA).(*SesionData)
	if !ok {
		return nil, errors.New("session data in GetSessionDataByCtx() is invalid")
	}

	return sessionData, nil
}

func SetSessionData(ctxExt *lego.RequestCtxExtent, sessionData *SesionData) {
	ctxExt.SetUserValue(CTX_KEY_SESSION_DATA, sessionData)
	return

}
